package com.ruoyi.activity.apect;

import com.ruoyi.common.annotation.Check;
import com.ruoyi.model.auth.AuthContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author : 张怀秋
 * 自定义切面类
 * 该类用于切入每一个打了Check注解的方法 获取到注解中Check中的 是否为组织者账号 的值 用于日志输出
 **/
@Aspect
@Component
@Slf4j
public class CustomAnnotationAspect {

    /**
     * 表示以后Check的标识的注解都会用到增强功能
     */
    @Pointcut("@annotation(com.ruoyi.common.annotation.Check)") //切入点
    public void pt() {

    }

    @Around("pt()")
    public Object handleCheckAnnotation(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); //获取到方法
        Check annotation = methodSignature.getMethod().getAnnotation(Check.class);
        boolean checkOrganization = annotation.isCheckOrganization();
        if (checkOrganization) {
            //如果为true 是组织者账号记录日志
            log.info("方法名:" + methodSignature.getMethod().getName());
            log.info("组织名称:" + AuthContextHolder.getUserInfo().getNickName());
            log.info("发布竞赛时间:" + new Date());
        }
        return joinPoint.proceed();
    }
}
